package design.behavior_strategy;

/**
 * 策略模式
 * jdk中的策略模式应用 Collections.sort(new ArrayList<Integer>(),(a,b)-> a > b ? 1:0);
 */
public class StrategyDemo {
    public static void main(String[] args) {
        Context context = new Context(new StrategyA());
        //想更换策略的时候不需要修改doStrategy中的代码逻辑
        context.doStrategy();
    }
    //定义一个策略接口
    public static interface Strategy {
        void strategyImplementation();
    }
    //具体的策略实现(可以定义多个具体的策略实现)
    public static class StrategyA implements Strategy{
        @Override
        public void strategyImplementation() {
            System.out.println("正在执行策略A");
        }
    }
    //封装策略，屏蔽高层模块对策略、算法的直接访问，屏蔽可能存在的策略变化
    public static class Context {
        private Strategy strategy = null;

        public Context(Strategy strategy) {
            this.strategy = strategy;
        }

        public void doStrategy() {
            strategy.strategyImplementation();
            //一些其他业务操作 ...
        }
    }
}
